package math.geom3d;

import math.base.Point3d;
import math.base.Vector3d;
import math.geomUtils.CurveType;

/**
 * @author Saga
 *
 */
public abstract class Curve3d {

    public abstract CurveType getCurveType();


    public abstract void reverse();

    public abstract Curve3d reversed();

    public abstract boolean isPeriodic();

    public abstract double getPeriod();

    public abstract double getFirstParameter();

    public abstract double getLastParameter();

    public abstract Point3d calcValue(double _param);

    public abstract Vector3d calcDerivative(double _param);

    public abstract Vector3d calcDerivativeN(double _param, int _order);

    public abstract void calcValueAndDerivative1(double _param, Point3d _pt, Vector3d _der1);

    public abstract void calcValueAndDerivative2(double _param, Point3d _pt, Vector3d _der1,
            Vector3d _der2);

    public abstract void calcValueAndDerivative3(double _param, Point3d _pt, Vector3d _der1,
            Vector3d _der2, Vector3d _der3);

}
